package org.chen.aao.app.utils;

/**
 * 版本号比较工具类
 */
public class VersionUtil {
    
    /**
     * 比较两个版本号
     * @param version1 版本号1
     * @param version2 版本号2
     * @return 如果version1 > version2 返回1, 如果version1 < version2 返回-1, 相等返回0
     */
    public static int compareVersion(String version1, String version2) {
        if (version1 == null || version2 == null) {
            throw new IllegalArgumentException("版本号不能为空");
        }
        
        // 去除版本号前缀 'v' 或 'V'
        version1 = version1.replaceAll("^[vV]", "");
        version2 = version2.replaceAll("^[vV]", "");
        
        String[] v1Parts = version1.split("\\.");
        String[] v2Parts = version2.split("\\.");
        
        int maxLength = Math.max(v1Parts.length, v2Parts.length);
        
        for (int i = 0; i < maxLength; i++) {
            int v1Part = i < v1Parts.length ? parseVersionPart(v1Parts[i]) : 0;
            int v2Part = i < v2Parts.length ? parseVersionPart(v2Parts[i]) : 0;
            
            if (v1Part > v2Part) {
                return 1;
            } else if (v1Part < v2Part) {
                return -1;
            }
        }
        
        return 0;
    }
    
    /**
     * 解析版本号部分
     * @param part 版本号部分字符串
     * @return 版本号数值
     */
    private static int parseVersionPart(String part) {
        try {
            // 处理可能包含的额外字符，如 "1-beta" -> "1"
            return Integer.parseInt(part.replaceAll("[^0-9].*", ""));
        } catch (NumberFormatException e) {
            return 0;
        }
    }
    
    /**
     * 判断是否需要更新
     * @param currentVersion 当前版本
     * @param latestVersion 最新版本
     * @return 是否需要更新
     */
    public static boolean needUpdate(String currentVersion, String latestVersion) {
        return compareVersion(currentVersion, latestVersion) < 0;
    }
}